//
//  UserAccountViewModel.swift
//  我的微博
//
//  Created by ZhangChao on 15/9/6.
//  Copyright © 2015年 ZhangChao. All rights reserved.
//

import UIKit
import ReactiveCocoa

class UserAccountViewModel: NSObject {

    // 单例
    static let sharedUserAccount = UserAccountViewModel()
    
    override init(){
        super.init()
        userAccount = UserAccount.loadUserAccount()
    }
    
    // 用户账户
    var userAccount: UserAccount?
    
    //access_token
    var accessToken: String?{
        
        return userAccount?.access_token
    }
    
    // 用户头像
    var avatarUrl : NSURL? {
        
        return NSURL(string: (userAccount?.avatar_large) ?? "")// 这里不可以强行解包
    }
    
    // 添加用户登录标记
    var userLogon: Bool{
        
        return accessToken != nil
    }
    func loadUserAccount(code: String) -> RACSignal {
        
        return RACSignal.createSignal({ (subscriber) -> RACDisposable! in
            
            // 这里用的doNext可以让俩个信号接在一起
            NetWorkTools.sharedTools.loadAccessToken(code).doNext({ (result) -> Void in
                
//                printLog("\(result)")
                
                // 字典转模型(这里的account和上面的account没有任何关系,而在userAccount中添加了判断token的方法,所以要进行一步赋值,这样就可以取到token了)
                let account = UserAccount(dict: result as! [String :AnyObject])
                
                // 给userAccount 赋值
                self.userAccount = account
                
                NetWorkTools.sharedTools.loadUserInfor(account.uid!) .subscribeNext({ (result) -> Void in
                    
                    let dict = result as! [String :AnyObject]
                    
                    account.name = dict["name"] as? String
                    account.avatar_large = dict["avatar_large"] as? String
                    
                    printLog(account)
                    
                    // 保存账号
                    account.saveUserAccount()
                    
                    // 将完成信息和错误信息全部发送出去
            
                    subscriber.sendCompleted()
                    
                    }, error: { (error) -> Void in
                        
                        subscriber.sendError(error)
                        
                    })
                }).subscribeError({ (error) -> Void in
                    
                    subscriber.sendError(error)
                })
            
            
            return nil
        })
        
    }
}
